package com.zjcloud.jwgl.service;

import java.util.List;
import com.zjcloud.jwgl.domain.ScTeacher;

/**
 * 教师信息Service接口
 * 
 * @author zjcloud
 * @date 2024-12-19
 */
public interface IScTeacherService 
{
    /**
     * 查询教师信息
     * 
     * @param id 教师信息主键
     * @return 教师信息
     */
    public ScTeacher selectScTeacherById(Long id);

    /**
     * 查询教师信息列表
     * 
     * @param scTeacher 教师信息
     * @return 教师信息集合
     */
    public List<ScTeacher> selectScTeacherList(ScTeacher scTeacher);

    /**
     * 新增教师信息
     * 
     * @param scTeacher 教师信息
     * @return 结果
     */
    public int insertScTeacher(ScTeacher scTeacher);

    /**
     * 修改教师信息
     * 
     * @param scTeacher 教师信息
     * @return 结果
     */
    public int updateScTeacher(ScTeacher scTeacher);

    /**
     * 批量删除教师信息
     * 
     * @param ids 需要删除的教师信息主键集合
     * @return 结果
     */
    public int deleteScTeacherByIds(Long[] ids);

    /**
     * 删除教师信息信息
     * 
     * @param id 教师信息主键
     * @return 结果
     */
    public int deleteScTeacherById(Long id);

    /**
     * 根据教师编码查询教师信息
     * 
     * @param teacherCode 教师编码
     * @return 教师信息
     */
    public ScTeacher selectScTeacherByCode(String teacherCode);

    /**
     * 检查教师编码是否唯一
     * 
     * @param scTeacher 教师信息
     * @return 结果
     */
    public String checkTeacherCodeUnique(ScTeacher scTeacher);

    /**
     * 根据教师类型查询教师列表
     * 
     * @param teacherType 教师类型
     * @return 教师列表
     */
    public List<ScTeacher> selectScTeacherByType(String teacherType);

    /**
     * 根据职称查询教师列表
     * 
     * @param title 职称
     * @return 教师列表
     */
    public List<ScTeacher> selectScTeacherByTitle(String title);

    /**
     * 根据职务查询教师列表
     * 
     * @param position 职务
     * @return 教师列表
     */
    public List<ScTeacher> selectScTeacherByPosition(String position);

    /**
     * 获取班主任列表
     * 
     * @return 班主任列表
     */
    public List<ScTeacher> selectHeadTeachers();

    /**
     * 获取可用教师列表（在职状态）
     * 
     * @return 教师列表
     */
    public List<ScTeacher> selectAvailableTeachers();

    /**
     * 根据工作负载查询教师列表
     * 
     * @param minWorkload 最小工作负载
     * @param maxWorkload 最大工作负载
     * @return 教师列表
     */
    public List<ScTeacher> selectScTeacherByWorkload(Integer minWorkload, Integer maxWorkload);

    /**
     * 更新教师工作负载
     * 
     * @param teacherId 教师ID
     * @param currentWeeklyPeriods 当前周课时
     * @return 结果
     */
    public int updateTeacherWorkload(Long teacherId, Integer currentWeeklyPeriods);

    /**
     * 设置班主任
     * 
     * @param teacherId 教师ID
     * @param classId 班级ID
     * @return 结果
     */
    public int setHeadTeacher(Long teacherId, Long classId);

    /**
     * 取消班主任
     * 
     * @param teacherId 教师ID
     * @return 结果
     */
    public int unsetHeadTeacher(Long teacherId);

    /**
     * 获取教师统计信息
     * 
     * @param teacherId 教师ID
     * @return 统计信息
     */
    public ScTeacher getTeacherStatistics(Long teacherId);

    /**
     * 更新教师统计信息
     * 
     * @param teacherId 教师ID
     * @return 结果
     */
    public int updateTeacherStatistics(Long teacherId);

    /**
     * 批量导入教师
     * 
     * @param teacherList 教师列表
     * @param isUpdateSupport 是否支持更新
     * @param operName 操作人
     * @return 结果
     */
    public String importTeacher(List<ScTeacher> teacherList, Boolean isUpdateSupport, String operName);
}